package br.com.certificacao.Conjuntos.treemap;

import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

/**
 * Classe demonstra o uso de TreeMap com a interface Comparable, lembrando sempre que a classificacao e feita pela chave, neste caso sera o 
 * chassi.
 * @author Sidney
 *
 */
class Carro implements Comparable{
	Integer chassi;
	String modelo;
	Carro(Integer chassi, String modelo){
		this.chassi = chassi;
		this.modelo = modelo;
	}
	public String toString(){
		return /*"Chassi: " + chassi +*/ "Modelo: " + modelo + " ";
	}
	public int hashCode(){
		return 13;
	}
	public boolean equals(Object carro){
		Carro car = (Carro)carro;
		if(this.modelo==car.modelo)
			return true;
		return false;
	}
	
	public int compareTo(Object carro){
		Carro car = (Carro)carro;
		return this.modelo.compareTo(car.modelo);//ordem crescente, para alterar a ordem basta que a referencia this seja mudada de lugar
		//return car.chassi.compareTo(((Carro)carro).chassi);
	}
}

public class TesteCarroMap {
	public static void main(String[] args) {
		Map lista = new TreeMap();
		Carro c1 = new Carro(1,"A");
		Carro c2 = new Carro(2,"B");
		Carro c3 = new Carro(3,"C");
		Carro c4 = new Carro(1,"A");
		Carro c5 = new Carro(2,"B");
		//adicionando elementos ao mapa, as duplicidades sao eliminadas pela chave do mapa, valores podem ser iguais
		lista.put(c1, "Mariana");// == c4
		lista.put(c2, "Teresa");//== c5
		lista.put(c3, "Silvia");//valor unico, valor pode ser null, chave nao pode, compila mas nao executa se a chave for nula
		lista.put(c4, "Roberto");// c1
		lista.put(c4, "Rubens");//== c1
		lista.put(c5, "Ricardo");//== c2
		//exibe a lista sem iterar por ela
		System.out.println(lista + "\n");
		
		Collection c = lista.values();
		Iterator t = c.iterator();
		while (t.hasNext())
			System.out.print(t.next()+ " ");
		
	}

}
